/**
 * 模块化
 * CommonJS
 * AMD
 * UMD
 * CMD
 * ESM
 */

// CommonJs => NodeJs 采用此规范
// 一套偏向服务端的模块化规范

// 特点：
//  - 一个文件就是模块，用有独立的作用域
//  - 导出模块内部数据 module.exports 或 exports

// AMD => 基于浏览器的模块化
// AMD => requireJS
// 一套偏向浏览器端的规范

// 特点
// 独立模块作用域
// - define(function () {
//    导出
//    return {}
//  })
// - define(function (require, exports, module) {
//    module.exports = {
//      ...
//   }
//  })

// 导入
// define(['./amd-a'], function (a) {
//   console.log(a);
// })

// define(function (require, exports, module) {
//   let a = require('./amd-a');
//   console.log(a);
// })

// html 代码内
// <script src="./require.min.js" data-main="./amd-b.js"></script>

// UMD 不属于一套模块规范， 主要处理CommonJs，AMD，CMD的差异兼容
// 可以在不同环境中使用
// typeof module.exports === 'object' && exports === 'object' node
// typeof define === 'function' 浏览器

// ESM
// script 标签需要声明 type='module'
// 必须在严格模式下使用
// 代码需要放在服务器下

